package com.yalantis.ucrop.util;

//不 会 改
import ohos.agp.render.opengl.*;

/**
 * Created by Oleksii Shliama [https://github.com/shliama] on 9/8/16.
 */
//大量配置文件，以及@Annotation
public class EglUtils {

    private static final String TAG = "EglUtils";

    private EglUtils() {

    }

    public static int getMaxTextureSize() {
        try {

                return getMaxTextureEgl14();

        } catch (Exception e) {
            LogUtils.LogError(TAG, "getMaxTextureSize: "+ e);
            return 0;
        }
    }

    private static int getMaxTextureEgl14() {
        EGLDisplay dpy = EGL.eglGetDisplay(EGL.EGL_DEFAULT_DISPLAY);
        int[] vers = new int[2];
        EGL.eglInitialize(dpy,  vers,  vers);//【风险】

        int[] configAttr = {
                EGL.EGL_COLOR_BUFFER_TYPE, EGL.EGL_RGB_BUFFER,
                EGL.EGL_LEVEL, 0,
                EGL.EGL_RENDERABLE_TYPE,
                EGL.EGL_SURFACE_TYPE, EGL.EGL_PBUFFER_BIT,
                EGL.EGL_NONE
        };
        //原来还有个参数：EGL.EGL_OPENGL_ES2_BIT
        EGLConfig[] configs = new EGLConfig[1];
        int[] numConfig = new int[1];
        EGL.eglChooseConfig(dpy, configAttr,
                configs, 1, numConfig);
        if (numConfig[0] == 0) {
            return 0;
        }
        EGLConfig config = configs[0];

        int[] surfAttr = {
                EGL.EGL_WIDTH, 64,
                EGL.EGL_HEIGHT, 64,
                EGL.EGL_NONE
        };
        EGLSurface surf = EGL.eglCreatePbufferSurface(dpy, config, surfAttr);

        int[] ctxAttrib = {
                2,
                EGL.EGL_NONE
        };
        //原来还有个参数EGL.EGL_CONTEXT_CLIENT_VERSION
        EGLContext ctx = EGL.eglCreateContext(dpy, config, EGL.EGL_NO_CONTEXT, ctxAttrib);

        EGL.eglMakeCurrent(dpy, surf, surf, ctx);

        int[] maxSize = new int[1];
        GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, maxSize);

        EGL.eglMakeCurrent(dpy, EGL.EGL_NO_SURFACE, EGL.EGL_NO_SURFACE,
                EGL.EGL_NO_CONTEXT);
        EGL.eglDestroySurface(dpy, surf);
        EGL.eglDestroyContext(dpy, ctx);
        EGL.eglTerminate(dpy);

        return maxSize[0];
    }

//    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
//    private static int getMaxTextureEgl10() {
//        EGL10 egl = (EGL10) javax.microedition.khronos.egl.EGLContext.getEGL();
//
//        javax.microedition.khronos.egl.EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
//        int[] vers = new int[2];
//        egl.eglInitialize(dpy, vers);
//
//        int[] configAttr = {
//                EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER,
//                EGL10.EGL_LEVEL, 0,
//                EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT,
//                EGL10.EGL_NONE
//        };
//        javax.microedition.khronos.egl.EGLConfig[] configs = new javax.microedition.khronos.egl.EGLConfig[1];
//        int[] numConfig = new int[1];
//        egl.eglChooseConfig(dpy, configAttr, configs, 1, numConfig);
//        if (numConfig[0] == 0) {
//            return 0;
//        }
//        javax.microedition.khronos.egl.EGLConfig config = configs[0];
//
//        int[] surfAttr = {
//                EGL10.EGL_WIDTH, 64,
//                EGL10.EGL_HEIGHT, 64,
//                EGL10.EGL_NONE
//        };
//        javax.microedition.khronos.egl.EGLSurface surf = egl.eglCreatePbufferSurface(dpy, config, surfAttr);
//        final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;  // missing in EGL10
//        int[] ctxAttrib = {
//                EGL_CONTEXT_CLIENT_VERSION, 1,
//                EGL10.EGL_NONE
//        };
//        javax.microedition.khronos.egl.EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, ctxAttrib);
//        egl.eglMakeCurrent(dpy, surf, surf, ctx);
//        int[] maxSize = new int[1];
//        GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0);
//        egl.eglMakeCurrent(dpy, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE,
//                EGL10.EGL_NO_CONTEXT);
//        egl.eglDestroySurface(dpy, surf);
//        egl.eglDestroyContext(dpy, ctx);
//        egl.eglTerminate(dpy);
//
//        return maxSize[0];
//    }
}
